﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using AdministracionPedidos;
using ComposicionPedidos;

namespace ControladorGUI
{
    public class Controlador:ISeleccionador
    {        
        private static Controlador instance;
        private IFrmIngresoPedido formIngresoPedido;
        private IFrmPreparacionPedido formPreparacionPedido;
        private IFrmSeleccionadorHorno formSeleccionadorHorno;
        private AdministradorPedidos _administradorPedidos;
        
        private Controlador()
        {
            _administradorPedidos = new AdministradorPedidos();
            
        }

        public static Controlador Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new Controlador();
                }
                return instance;
            }
        }


        public void write(string path)
        {
            
            _administradorPedidos.read(path);

        }


        public void Ingresar()
        {
           
            Hashtable hash = formIngresoPedido.GetPedido();
            
            List<ProductoCantidad> listaProductosCant = new List<ProductoCantidad>();
            List<Bebida> listaBebida = new List<Bebida>();

            foreach (KeyValuePair<string,string> clave in hash.Keys)
            {
                ProductoCantidad prodCant = new ProductoCantidad();
                ProductoPizzeria producto;
                Bebida bebida;

                prodCant.setCantidadCocinada(0);
                prodCant.setCantidadTotal(Convert.ToInt16(hash[clave]));

                switch(clave.Key)
                {
                    case "Pizza":
                        if (clave.Value == "Muzzarela")
                        {
                            producto = new Pizza(SaborPizza.Muzzarela);
                            prodCant.setProducto(producto);
                        }
                        else if (clave.Value == "Fugazza")
                        {
                            producto = new Pizza(SaborPizza.Fugazza);
                            prodCant.setProducto(producto);
                        }
                        break;
                        
                    case "Empanda":
                        if (clave.Value == "Carne")
                        {
                            producto = new Empanada(SaborEmpanada.Carne);
                            prodCant.setProducto(producto);
                        }
                        else if (clave.Value == "Pollo"){
                            producto = new Empanada(SaborEmpanada.Pollo);
                            prodCant.setProducto(producto);
                        }
                        else if (clave.Value == "Verdura")
                        {
                            producto = new Empanada(SaborEmpanada.Verdura);
                            prodCant.setProducto(producto);
                        }
                        else if (clave.Value == "JamonQueso")
                        {
                            producto = new Empanada(SaborEmpanada.JamonQueso);
                            prodCant.setProducto(producto);
                        }
                        break;

                    case "Bebida":
                        bebida = new Bebida();
                        listaBebida.Add(bebida);
                        break;
                }
                
                
                listaProductosCant.Add(prodCant);
            }

            _administradorPedidos.registrarPedido(listaProductosCant, listaBebida, this);

            formIngresoPedido.Clear();

        }

        public int dameIdHorno(ColaAsignacion _colaAsignacion)
        {
            
            Queue<KeyValuePair<Pedido, int>> pedidosEnHorno = _colaAsignacion.getPedidosAsignados();
            List<Pedido> colaHornoPizza = new List<Pedido>();;
            List<Pedido> colaHornoEmpanadas = new List<Pedido>();


            foreach (KeyValuePair<Pedido, int> pedidoHorno in pedidosEnHorno)
            {
                if (pedidoHorno.Value == 1)
                {
                    colaHornoPizza.Add(pedidoHorno.Key);
                }
                else
                {
                    colaHornoEmpanadas.Add(pedidoHorno.Key);
                }
            }

            formSeleccionadorHorno.seleccionar(colaHornoPizza,colaHornoEmpanadas);

            return formSeleccionadorHorno.IdHorno;

        }

        public void InicializarIngresoPedidos(IFrmIngresoPedido _form, IFrmSeleccionadorHorno _formSeleccionador)
        {
            formIngresoPedido = _form;
            formSeleccionadorHorno = _formSeleccionador;

        }
        public void InicializarPreparacionPedidos(IFrmPreparacionPedido _form)
        {
            formPreparacionPedido = _form;
            formPreparacionPedido.Inicializar();

        }

    }
}
